home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / bixdos.arc / INT2F < prev    next >
Text File  |  1986-11-24  |  5KB  |  132 lines

  1. TITLE: Documentation for INT 2FH
  2.  
  3.    The  2F  Hex DOS interrupt will, starting with versions 3.0
  4. and above, be referred  to  as  the  Multiplex  interrupt.   A
  5. general  interface  has  been  defined  to  allow  "Fakey" IPC
  6. between two processes.  The definition of  specific  functions
  7. and  parameters  is left to the specific application using the
  8. interrupt, what is defined here is the common  ground  between
  9. all Multiplex Interrupt handlers/users.
  10.  
  11.    Every  Multiplex  Interrupt  handler is assigned a specific
  12. multiplex number which is always specified in the AH register.
  13. Handlers  are  chained  into  the INT 2FH interrupt vector and
  14. discriminate based on the AH value.  The specific function  to
  15. be  performed  is placed in the AL register.  Other parameters
  16. are placed in the other registers as needed.
  17.  
  18.    MULTIPLEX NUMBERS AH=0 through AH=7FH are reserved for  DOS
  19. use.  Other  apps should use multiplex numbers 80H-FFH.  There
  20. is no mechanism for getting  a  multiplex  number  "assigned".
  21. You  must  just  pick one.  This makes it possible to have two
  22. different 2F users which cannot run at the same  time  because
  23. they  are  both  trying  to use the same multiplex number.  To
  24. prevent this the multiplex number(s) used  by  an  application
  25. should  be  patchable, so that a user can change it to prevent
  26. conflicts with another application.
  27.  
  28. Several of the AL function values are predefined or reserved:
  29.  
  30.         AL = 0 Get Installed State
  31.  
  32.                 This  call  MUST  be  defined  by  ALL INT 2FH
  33.                 handlers and is used by a potential caller  of
  34.                 the  handler  to  determine  if the handler is
  35.                 present.  The installed state is  returned  in
  36.                 the AL register:
  37.  
  38.                     AL = 0   Not installed, OK to install.
  39.                     AL = 1   Not installed, NOT OK to install.
  40.                     AL = FF  Installed.
  41.  
  42.                 NO OTHER REGISTERS MAY BE MODIFIED.
  43.                 Note that the return of 0 (AL not modified) is
  44.                 not actually set by  a  handler.   It  results
  45.                 from  the  request being passed through all of
  46.                 the INT  2FH  handlers  without  any  of  them
  47.                 processing  it.   The  1 return can be used to
  48.                 provide mutual exclusion between two  or  more
  49.                 different  2F  users  which  must  not both be
  50.                 installed at the same time.
  51.  
  52.         AL = F8 - FF Reserved.
  53.  
  54.                    These call numbers are reserved for  future
  55.                 standard call  expansion.  ALL Current INT 2FH
  56.                 handlers must return from these calls  WITHOUT
  57.                 MODIFYING ANY REGISTERS (including AX).
  58.  
  59.  
  60. EXAMPLE 2F Handler:
  61.  
  62.  
  63. MYNUM           EQU     X               ; X = the specific AH multiplex number.
  64.  
  65. INT_2F_NEXT     DD      ?               ; Chain location
  66.  
  67. INT_2F:
  68. ASSUME  DS:NOTHING,ES:NOTHING,SS:NOTHING
  69.         CMP     AH,MYNUM
  70.         JE      MINE
  71.         JMP     INT_2F_NEXT            ; Chain to next 2FH Handler
  72.  
  73. MINE:
  74.         CMP     AL,0F8H
  75.         JB      DO_FUNC
  76.         IRET                            ; IRET on reserved functions
  77.  
  78. DO_FUNC:
  79.         OR      AL,AL
  80.         JNE     DISP_FUNC               ; A non GET INSTALLED STATE req
  81.         MOV     AL,0FFH                 ; Say I'm here
  82.         IRET                            ; All done
  83.  
  84. DISP_FUNC:
  85.         .
  86.         .
  87.         .
  88.  
  89.  
  90.  
  91.  
  92.  
  93. HERE IS A CODE SAMPLE FOR INSTALLING THE ABOVE HANDLER:
  94.  
  95.         .
  96.         .
  97.         .
  98.         MOV     AH,MYNUM
  99.         XOR     AL,AL
  100.         INT     2FH                     ; Ask if already installed
  101.         OR      AL,AL
  102.         JZ      OK_INSTALL
  103. BAD_INSTALL:                            ; Handler already installed
  104.         .
  105.         .
  106.         .
  107.  
  108.  
  109. OK_INSTALL:
  110.         MOV     AL,2FH
  111.         MOV     AH,GET_INTERRUPT_VECTOR
  112.         INT     21H                     ;Get multiplex vector
  113.         MOV     WORD PTR INT_2F_NEXT+2,ES
  114.         MOV     WORD PTR INT_2F_NEXT,BX
  115.         MOV     DX,OFFSET INT_2F
  116.         MOV     AL,2FH
  117.         MOV     AH,SET_INTERRUPT_VECTOR
  118.         INT     21H                     ;Set multiplex vector
  119.         .
  120.         .
  121.         .
  122.  
  123.  
  124. NOTE WARNING DANGER:
  125.  
  126.         BECAUSE OF THE CHAINING OF THE 2F VECTOR IT IS NOT GENERALLY
  127.         POSSIBLE TO REMOVE A 2FH HANDLER FROM THE SYSTEM. IT CAN BE
  128.         DONE IF IT IS KNOWN THAT THE HANDLER IS THE FIRST ONE IN THE
  129.         LIST (VECTOR LOCATION IN INTERRUPT TABLE POINTS TO IT), OR IT
  130.         IS KNOWN WHICH OF THE OTHER HANDLERS POINTS TO IT, AND IT IS
  131.         KNOWN HOW TO PATCH THAT HANDLER.
  132.